/**
 * 
 */
package uea.pdd.pf2.model;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;


/**
 * @author fernando luna
 *
 */
public class RepositorioMedicamentosDB implements IRepositorioMedicamentos{
	
	private DBHelper bdHelper;
	public static IRepositorioMedicamentos instance;
	
	public static IRepositorioMedicamentos getInstance(Context contexto){
		if(instance == null){
			instance = new RepositorioMedicamentosDB(contexto);
		}
		return instance;
	}
	
	private RepositorioMedicamentosDB (Context contexto){
		
		bdHelper = new DBHelper(contexto);
	}
	
	
	/** Esse metodo eh semelhante a query
	 *  INSERT INTO medicamentos (nome, quantidade) values (x, y);   
	 *  */ 
	public void salvarMedicamento(Medicamento medicamento){
		ContentValues cv = new ContentValues();
		cv.put(DBHelper.COLUNA_NOME, medicamento.getNome_med());
		cv.put(DBHelper.COLUNA_HORA, medicamento.getHora_med());
		cv.put(DBHelper.COLUNA_FREQ, medicamento.getFreq_med());
		cv.put(DBHelper.COLUNA_QTDU, medicamento.getQtdu_med());
		
		abrirBanco().insert(DBHelper.TABELA_MED, "", cv);
		fecharBanco();
	}
	
	
	/** Este metodo eh semelhante a query
	  * UPDATE medicamentos SET (id = x, nome = y, ...);   
	  * */
	public void atualizarMedicamento(Medicamento medicamento) {  
		  ContentValues cv = new ContentValues();  
		  cv.put(DBHelper.COLUNA_NOME, medicamento.getNome_med());   
		  cv.put(DBHelper.COLUNA_HORA, medicamento.getHora_med());
		  cv.put(DBHelper.COLUNA_FREQ, medicamento.getFreq_med());
		  cv.put(DBHelper.COLUNA_QTDU, medicamento.getQtdu_med());
		  String where = DBHelper.COLUNA_ID + "=?";   
		  String[] whereArgs = new String[] { medicamento.getId_med() + "" };  
		  abrirBanco().update(DBHelper.TABELA_MED, cv, where, whereArgs);   
		  fecharBanco();
		  } 
	
	
	/** Este metodo eh semelhante a query   
	 *  DELETE FROM medicamentos where id = x;'   
	 *  */
	public void removerMedicamento(Integer id) {  
		  String where = DBHelper.COLUNA_ID + "=?";   
		  String[] whereArgs = new String[] { id + "" };  
		  abrirBanco().delete(DBHelper.TABELA_MED, where, whereArgs);   
		  fecharBanco();  
		  } 
	
	
	/** Este metodo eh semelhante a query    
	 *  SELETE * FROM produtos where nome like %x%;   
	 * */  
	public List<Medicamento> procurarMedicamentos(String nome) {  
		  if (nome.length() == 0) {    
			  return listarMedicamentos();   
			  }   
		  
		  Cursor cursor = abrirBanco().query(bdHelper.TABELA_MED,     
				  		bdHelper.COLUNAS,     
				  		bdHelper.COLUNA_NOME + " LIKE '%" + nome + "%'", null, null,     
				  		null, null);   
		  
		  List<Medicamento> medicamento = retornaLista(cursor); 
		  
		  fecharBanco();
		  
		  return medicamento;
		  
		  }
	
	
	/** Este metodo eh semelhante a query   
	 ** SELECT * FROM produtos;   
	 **/ 
	public List<Medicamento> listarMedicamentos() {  
		  Cursor cursor = abrirBanco().query(DBHelper.TABELA_MED,     
				  bdHelper.COLUNAS, null, null, null, null, null);  
		  
		  List<Medicamento> medicamento = retornaLista(cursor); 
		  
		  fecharBanco(); 
		  
		  return medicamento;  
		  
		  }
	
	/** Este metodo eh semelhante a query   
	 * * SELECT * FROM produtos WHERE id = x;   
	 * */
	public Medicamento procurarMedicamentoPorId(Integer id) {   
		Cursor cursor = abrirBanco().query(bdHelper.TABELA_MED,     
				bdHelper.COLUNAS, bdHelper.COLUNA_ID + "='" + id + "'", null,     
				null, null, null);  
	  List<Medicamento> medicamentos = retornaLista(cursor); 
	  
	  fecharBanco();   
	  
	  return medicamentos.get(0);  
	  
	}
	
	/** O metodo getWritableDatabase abre ou cria o banco de dados.   
	 * * Da primeira vez que ele for chamado o banco eh criado.   
	 * * Das vezes seguintes ele eh apenas aberto.   
	 * */
	private SQLiteDatabase abrirBanco() {   
		return bdHelper.getWritableDatabase();  
		} 
	
	
	/** Fechar o banco eh importante para economizar   
	 * * recursos do sistema.   */  
	private void fecharBanco() {   
		bdHelper.close();  
		}
	
	private List<Medicamento> retornaLista(Cursor cursor){
		
		List<Medicamento> medicamento = new ArrayList<Medicamento>();
		if (cursor.moveToFirst()){
			do{
				Integer id = cursor.getInt(cursor.getColumnIndex
						(bdHelper.COLUNA_ID));
				String nome = cursor.getString(cursor.getColumnIndex
						(bdHelper.COLUNA_NOME));
				Integer hora = cursor.getInt(cursor.getColumnIndex
						(bdHelper.COLUNA_HORA));
				Integer freq = cursor.getInt(cursor.getColumnIndex
						(bdHelper.COLUNA_FREQ));
				Integer qtdu = cursor.getInt(cursor.getColumnIndex
						(bdHelper.COLUNA_QTDU));
				
			} while (cursor.moveToNext());
		}
		return medicamento;
	}
//tirar esses 2 metodos...
	@Override
	public List<Medicamento> procurarMedicamento(String nome) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Medicamento> listarMedicamento() {
		// TODO Auto-generated method stub
		return null;
	}


}
